package cn.walls1717.ggkt.result;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用结果返回对象
 *
 * @author walls1717
 * @since 2022/6/29
 **/
@ApiModel("通用结果返回对象")
@Data
@NoArgsConstructor
public class Result<T> {

    @ApiModelProperty("状态码")
    private Integer code;
    @ApiModelProperty("提示信息")
    private String message;
    @ApiModelProperty("数据")
    private T data;

    /**
     * 成功
     *
     * @param data 数据
     * @return 通用结果对象
     * @param <T> T
     */
    public static<T> Result<T> success (T data) {
        Result<T> result = new Result<>();
        // 成功状态码200
        result.setCode(20000);
        // 成功提示信息
        result.setMessage("success");
        // 如果数据不为空，设置数据
        if (data!=null) {
            result.setData(data);
        }
        return result;
    }

    public static<T> Result<T> success () {
        Result<T> result = new Result<>();
        // 成功状态码200
        result.setCode(20000);
        // 成功提示信息
        result.setMessage("success");
        // 设置数据为空
        result.setData(null);
        return result;
    }

    /**
     * 失败
     *
     * @param data 数据
     * @return 通过结果对象
     * @param <T> T
     */
    public static <T> Result<T> error(T data) {
        Result<T> result = new Result<>();
        // 失败状态码
        result.setCode(20001);
        // 失败提示信息
        result.setMessage("error");
        // 数据
        if (data!=null) {
            result.setData(data);
        }
        return result;
    }

    /**
     * 自定义提示信息
     *
     * @param msg 提示信息
     * @return 设置提示信息
     */
    public Result<T> message(String msg){
        this.setMessage(msg);
        return this;
    }

    /**
     * 自定义状态码
     *
     * @param code 状态码
     * @return 设置状态码
     */
    public Result<T> code(Integer code){
        this.setCode(code);
        return this;
    }



}
